﻿//#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>

#include "common.h"

// c 语音中没有闭包，但是可以嵌套调用函数
float my_add(float a, float b)
{
    return a + b;
}

float my_sub(float a, float b)
{
    return a - b;
}

float my_mul(float a, float b)
{
    return a * b;
}

float my_div(float a, float b)
{
    if (0 == b)
    {
        printf("除数不能为0！\n");
        return 0;
    }
    return a / b;
}

// 函数不写返回值类型，则默认为 int 类型
no_type_result(float a, float b, float c, float d)
{
    return a + b + c + d;
}

// 写了返回类型，但函数代码块没写返回值，可能会返回最后一条语句执行的返回结果
int printf_result(int a, int b, int c, int d)
{
    a = a + b;
    b = a - b;
    c = b * c;
    d = c / d;
    printf("result is %d\n", a + b + c + d);
}

void easy_print()
// 没有参数，不想要外部参数，可以写个 void 参数（编译器会报错）
{
    printf("hello world\n");
}

int nest()
{
    float a = 10.0;
    float b = 5.0;
    float c = 2.0;
    float d = 3.0;

    // 调用函数
    float result = my_add(a, b);
    result = my_sub(result, c);
    result = my_mul(result, d);
    result = my_div(result, 2.0);

    // 调用函数
    printf("结果为：%d\n", no_type_result(a, b, c, d)); // %d 为 20

    // 调用函数
    printf("结果为：%d\n", printf_result(a, b, c, d)); // %d 为 13

    // 调用函数
    easy_print(100); // 对没有形式参数的函数传参调用，参数会被忽略

    return 0;
}